[英]QSignalMapper doesn't work when connecting QAbstractButton::clicked to map()
我想讓MainWindow
接收QToolButtons發出的信號,然后根據QToolButtons發送的索引在slot function中做一些事情。 當我編譯項目時,沒有發生錯誤。 但是當我點擊這些工具按鈕時,沒有任何反應,也沒有打印日志。 我認為信號或槽有問題,但程序運行沒有錯誤,所以我不知道如何找到解決方案。
MainWindow.cpp
:
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle(MainWindowTitle);
setWindowIcon(QIcon(":/res/icons/logo.ico"));
signalMapper = new QSignalMapper(this);
initLayout();
}
void MainWindow::initLayout()
{
// initialize sidebar buttons
initSideBar();
// initialize QStackedWidget
/* initialize CodePage */
codePage = new CodePage(this);
ui->stackedWidget->addWidget(codePage);
ui->stackedWidget->setCurrentWidget(codePage);
/* initialize Charts */
qCharts = new ThemeWidget();
ui->stackedWidget->addWidget(qCharts);
// ui->stackedWidget->setCurrentWidget(qCharts);
}
void MainWindow::initSideBar()
{
QStringList btn_bgImages;
QStringList btn_names;
btn_bgImages << ":res/sidebar/code.png" << ":res/sidebar/pencil.png" << ":res/sidebar/visualize.png" << ":res/sidebar/graph.png";
btn_names << "Editor" << "Designer" << "Visualize" << "Charts";
for(int i = 0; i < btn_bgImages.size(); i++)
{
cTabButton* ctBtn = new cTabButton(btn_bgImages.at(i));
ctBtn->setText(btn_names.at(i));
connect(ctBtn, SIGNAL(&QAbstractButton::clicked), signalMapper, SLOT(&QSignalMapper::map));
signalMapper->setMapping(ctBtn, i);
ui->sidebar->addWidget(ctBtn, 0, Qt::AlignTop);
}
QObject::connect(signalMapper, SIGNAL(map), this, SLOT(MainWindow::switchPage));
}
void MainWindow::switchPage(int index)
{
qDebug() << "switchPage() triggered";
switch(index)
{
case 0:
qStackedWidget->setCurrentWidget(codePage);
break;
case 1:
break;
case 2:
break;
case 3:
qStackedWidget->setCurrentWidget(qCharts);
break;
default:
break;
}
}
MainWindow.h
:
QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr);
~MainWindow();
private slots:
void switchPage(int);
private:
Ui::MainWindow* ui;
CodeEditor* configEditor;
QListView* sidebar;
QStackedWidget* qStackedWidget;
CodePage* codePage;
ThemeWidget* qCharts;
QSignalMapper* signalMapper;
void initSideBar();
void initLayout();
};
cTabButton.h
class cTabButton : public QToolButton{
Q_OBJECT
public:
cTabButton(const QString& path, QWidget *parent=0);
~cTabButton();
protected:
QString path;
bool m_mousePressed;
bool m_mouseHover;
void doPaintStuff(int topColor, int centerColor, int bottomColor);
void setButtonPressed(bool isPressed);
void enterEvent(QEnterEvent *);
void leaveEvent(QEvent *);
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
};
看起來您正在連接到錯誤的 QSignalMapper 信號。 由於您是 map 到 integer,因此您想要連接到QSignalMapper::mappedInt :
QObject::connect(signalMapper, &QSignalMapper::mappedInt, this, &MainWindow::switchPage);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.