У меня есть QListWidget, который находится в QGridLayout внутри QWizardPage. Элементы в QListWidget — это все файлы xml в каталоге. У меня все работает, кроме сигналов. Я упускаю что-то критическое, но простое, я уверен.
Я просмотрел документацию QListWidget и это и этот пост и другие. Кажется, все говорит, что itemClicked( QListWidgetItem* ) должен быть тем, что мне нужно, но он и другие не работают, т.е. моя функция new_sequence_selected никогда не вызывается. Connect также никогда не возвращает дескриптор для этого, всегда false.
Большинство сигналов, которые я пробовал, находятся в приведенном ниже коде.
Кроме того, моя кнопка просмотра работает нормально.
Дополнительная информация: Работа в Win7, VS2012, Qt5, надстройка Qt VS 1.2.2
Заранее спасибо за помощь!!
создатель.h
#include <qwizard.h>
#include <QtWidgets>
#include <QHeaderView>
class Sequence_selectPage : public QWizardPage
{
Q_OBJECT
public: Sequence_selectPage( QWidget *parent = 0 );
private slots:
void browse();
private:
QListWidget *sequenceList;
QDir sequences_dir_path;
QString selected_sequence;
};
создатель.cpp
#include "creator.h"
Sequence_selectPage::Sequence_selectPage( QWidget *parent ) : QWizardPage( parent )
{
first_round = true;
setTitle( tr( "Select an xml" ) );
// setup path to Sequence
sequences_dir_path.absolutePath();
sequences_dir_path.cd( "Sequence" );
//set up the list for the files
sequenceList = new QListWidget( this );
//sequenceList->setSelectionMode( QAbstractItemView::SingleSelection );
QStringList filter;
filter << "*.xml";
//add xmls to list
foreach( QString File, sequences_dir_path.entryList( filter, QDir::Files ) ) //(QStringList)"*.xml"
{
sequenceList->addItem( File );
}
if( sequenceList->count() > 0 )
{
sequenceList->item( 0 )->setSelected( true );
}
browseButton = buttonBuilder( tr( "Browse..." ), this, SLOT( browse() ) );
/*********** Figure out this signal **********/
connect( sequenceList, SIGNAL( sequenceList->itemClicked( QListWidgetItem* i ) ), this, SLOT( new_sequence_selected( QListWidgetItem* i) ) );
//connect( sequenceList, SIGNAL( itemClicked( QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
//connect( sequenceList, SIGNAL( itemActivated( QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
//connect( sequenceList, SIGNAL( itemEntered( QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
//connect( sequenceList, SIGNAL( itemPressed( QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
//connect( sequenceList, SIGNAL( itemSelectionChanged( ) ), this, SLOT( new_sequence_selected( ) ) );
//connect( sequenceList, SIGNAL( itemDoubleClicked( QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
//connect( sequenceList, SIGNAL( itemChanged( QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
//connect( sequenceList, SIGNAL( currentItemChanged( QListWidgetItem*, QListWidgetItem* ) ), this, SLOT( new_sequence_selected( QListWidgetItem* ) ) );
selectpageLayout = new QGridLayout( this );
selectpageLayout->addWidget( sequenceList, 0, 0, 1, 2 );
selectpageLayout->addWidget( browseButton, 1, 1 );
setLayout( selectpageLayout );
}
void Sequence_selectPage::new_sequence_selected( QListWidgetItem* sequence )
{
selected_sequence = sequence->text();
}
buttonBuilder код
QPushButton *buttonBuilder( QString &button_name, QObject *receiver, const char *member )
{
QPushButton *mybutton = new QPushButton( button_name );
QObject::connect( mybutton, SIGNAL( clicked() ), receiver, member );
return mybutton;
}
sequences_dir_path.absolutePath();
не нужен. - person lpapp   schedule 03.05.2014