2013-09-03 9 views
1

QMainWindow 생성자에서 데이터베이스를 읽고 해당 항목을 QListWidget으로 채 웁니다. 분명히 선택된 항목이 없으므로 독자적으로해야합니다. 또한 을 클릭하면 목록에있는 항목에 슬롯이 있습니다.C++ - QListWidget 첫 번째 항목 선택

시도했지만 setCurrentRow(const int)하지만 그렇게하면 슬롯이 호출되지 않습니다. 함수 setCurrentIndex (const QModelIndex &)를 보았지만 QModelIndex에 익숙하지 않습니다.

QListWidget에서 첫 번째 항목을 선택하고 on_list_clicked(const QModelIndex& index) 슬롯을 호출하도록하려면 어떻게해야합니까?

편집 : 또한 목록에서 특정 색인을 제거하면 currentRowChanged(int)itemSelectionChanged() 모두 내 프로그램이 중단되므로 클릭 한 슬롯 이외의 다른 슬롯을 사용할 수 없습니다.

그래서 어떻게 든 호출 setCurrentRow()

+0

왜 setCurrentRow()를 호출하지 않으며 (const를 QModelIndex 및 색인) 생성자에서 on_list_clicked을 방출? 즉, QListWidget :: setCurrentItem 다음에 QListWidget :: currentItemChanged()를 호출하십시오. – sashoalm

+0

@sashoalm 잘 방출 할 수는 있지만 QModelIndex가 필요합니다. 그리고 그게 문제입니다. QModelIndex를 올바른 방법으로 만드는 법을 모릅니다 ... 모든 것을 시도했지만 컴파일되지 않습니다. – Davlog

답변

4

대신 QModelIndexint을 받아들이는 신호 currentRowChanged()을 방출 ... 목록에 클릭을 수행해야합니다.

itemSelectionChanged() 대신 해당 신호에 연결하기 만하면됩니다.

샘플 코드 :

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    ui->listWidget->setCurrentRow(1); 
} 

void MainWindow::on_listWidget_currentRowChanged(int currentRow) 
{ 
    qDebug() << currentRow; 
} 
+0

할 수 없습니다. 목록에서 특정 항목을 제거하면 프로그램이 충돌합니다. 나는 데이터베이스로부터 정보를 보유하는 QList를 가지고있다. QListWidget의 행은 QList의 현재 항목입니다. 행을 변경하면이 정보가 몇 개의 레이블 등에 표시되기를 원합니다. 따라서 QList에서 항목을 제거한 다음 QListWidget에서 항목을 제거하면 더 이상 존재하지 않을 수있는 행의 정보가 표시됩니다 추락. – Davlog

+0

신경 쓰지 마세요, 고마워요. 나는 어떻게 든 어딘가에서 엉망으로 고정시켰다. 이제 currentRow를 사용하는 것이 좋습니다. :) 고마워. – Davlog