listview와 tableview를 함께 사용하려고합니다.목록보기에서 사용자 지정 데이터를 포함하도록 데이터 원본을 설정하는 방법은 무엇입니까? (그리고 QTableView와 연관)
목록보기를 사용하여 표시해야하며 데이터 편집에는 tableview를 사용해야합니다. Tableview는 팝업 위젯에서 필요에 따라 생성되며 필요 없을 수도 있습니다.
처음에는 텍스트 파일에서 listview를 채 웁니다. 각 행에는 탭으로 구분 된 2 개의 항목이 있습니다. 쉬운.
의 tableview 내가 QStringListModel
의 모델 서브 클래스를 생성 한
... 또한, 목록보기를 클릭에, 내가 분할의 첫 번째 부분을 검색 할 수 있어야합니다 ... 별도로 2 열을 편집해야합니다.
class StringList : public QStringListModel
{
public:
void append (const QString& string)
{
insertRows(rowCount(), 1);
QModelIndex m = index(rowCount() - 1);
setData(m, string, Qt::EditRole);
QStringList splist = string.split('\t');
setData(m, splist.at(0), Qt::ToolTipRole);
if(splist.size() > 1)
setData(m, splist.at(1), Qt::StatusTipRole);
else
setData(m, "", Qt::StatusTipRole);
qDebug() << data(m, Qt::EditRole).toString()
<< data(m, Qt::ToolTipRole).toString()
<< data(m, Qt::StatusTipRole).toString();
}
};
EditRole
표시가 제대로, 나머지는 빈 문자열을 표시
QListView *m_myView = new QListView();
StringList *m_myList = new StringList();
QTextStream in(&myFile);
while (!in.atEnd())
{
QString temp = in.readLine();
if(!temp.isEmpty())
m_myList->append(temp);
}
myFile.close();
m_myView->setModel(m_myList);
.
QStringListModel
은 EditRole
을 제외한 모든 것을 저장할 수없는 것으로 보입니다.
그래서 두 가지 옵션이 남았습니다. 각 선택에서 분할을 수행하고 테이블보기를 만들 때 또는 - 시도하고 싶은 것이 있지만 어떻게 알지는 못합니다 - 다음과 같이 작동 할 수있는 QStandardItemModel
을 만듭니다. listview와 tableview에 대한 데이터 소스를 제공하며 클릭시 필요한 부분 데이터를 쉽게 검색 할 수 있습니다.
나는 단순히 목록보기 (예 : here)에서 데이터를 설정하는 데 사용할 수 있다고 생각했습니다.
QListView *m_myView = new QListView();
QStandardItemModel *m_myList = new QStandardItemModel();
QTextStream in(&myFile);
int r = 0;
while (!in.atEnd())
{
QString temp = in.readLine();
if(!temp.isEmpty())
{
QStringList splist = temp.split('\t'); // assume I know there will be 2 strings always
QStandardItem *item = new QStandardItem(splist.at(0));
m_myList->setItem(r, 0, item);
QStandardItem *item1 = new QStandardItem(splist.at(1));
m_myList->setItem(r, 1, item1);
++r;
}
}
myFile.close();
m_myView->setModel(m_myList);
connect(m_myListView, SIGNAL(clicked(QModelIndex)),
this, SLOT(listChangedSlot(QModelIndex)));
하지만 이것은 단지 목록보기의 첫 번째 문자열을 설정합니다 ...
을에서 정말 모두 필요하고, 난 여전히 데이터
void listChangedSlot(QModelIndex index)
{
qDebug() << m_myList->item(index.row(), 0)->data().toString()
<< m_myList->item(index.row(), 1)->data().toString();
} // shows empty strings
또는를 검색하는 방법을 모른다 로드 섹션에서 시도 :
이 작동합니다 - 잘 표시하고 클릭시 올바른 콘텐츠를 가져옵니다 -하지만 tableview 사용할 수없는 것 같습니다.
(그리고 나는 setItem
과 setItemData
으로 두 번 일하고있는 것 같습니다. 그래서 기술적으로 내용을 3 번 저장합니다).
목록보기에 2 개의 문자열 항목이있는 데이터 소스가 있고 둘 다 표시하고 테이블 뷰에서 설정할 수 있으며 클릭시 첫 번째 항목을 검색 할 수 있습니까? 결합 성분과 컬럼 0 및 컬럼 분리 된 성분 1 및 2 -
I 3 열을 생성 :