gpt4 book ai didi

C++ - 从 QPushButton 添加项目到 QListWidget

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:49 27 4
gpt4 key购买 nike

您好,我正在尝试从 QPushButton 向 QListWidget 添加项目。 QListWidget 和 QPushButton 都作为单独的小部件添加到 QGraphicsScene 中。我想要一个用文本行填充的框的效果

主程序

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;

QGraphicsView view;

QGraphicsScene *scene = new QGraphicsScene(0, 0, 1200, 1200, &view);

scene->setBackgroundBrush(Qt::gray);

view.setScene(scene);

QPushButton *PushButton1;
PushButton1 = new QPushButton();
PushButton1->setGeometry(QRect(19, 20, 154, 4));

QListWidget *ListWidget;
ListWidget = new QListWidget;

scene->addWidget(ListWidget);
scene->addWidget(PushButton1);

QObject::connect(PushButton1, SIGNAL(clicked()),&w, SLOT(handleClick(*QListWidget)));

view.show();

return a.exec();

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

MainWindow::~MainWindow()
{
delete ui;
}


void MainWindow::handleClick(QListWidget *List)
{
int test;

List->addItem("TESTING");

//QApplication::quit();

}

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QListWidget>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;


private slots:


public slots:

void handleClick(QListWidget *List);
};

#endif // MAINWINDOW_H

这段代码编译得很好。如何在应用程序运行时在控制台中出现以下错误

QObject::connect: No such slot MainWindow::handleClick(*ListWidget) in ..\MenuTest\main.cpp:48

有人可以帮我做这个吗?我看过几个教程,但它使用设计器来制作 GUI,我想知道如何在不使用设计器的情况下用代码来完成它。谢谢。

最佳答案

您的插槽接受 QListWidget 但您连接的是 ListWidget 作为参数,由于信号和插槽在 Qt 中的工作方式,签名必须完全匹配。

将 handleClick 放在 public slots: 下并更改此行:

QObject::connect(PushButton1, SIGNAL(clicked()),&w, SLOT(handleClick(*ListWidget)));

对此:

QObject::connect(PushButton1, SIGNAL(clicked()),&w, SLOT(handleClick(*QListWidget)));

更新:

我发现我错过了一个关键点,签名必须匹配,就像参数到参数一样,所以那里的行将不起作用。

要解决此问题,请完全删除该参数,因为 PushButton1 无法自动发送它。

QObject::connect(PushButton1, SIGNAL(clicked()),&w, SLOT(handleClick()));

也在这里删除它:

void MainWindow::handleClick()

要访问 QListWidget,您必须直接引用它,方法是将其传递给 MainWindow 的构造函数或迭代窗口的控件。

关于C++ - 从 QPushButton 添加项目到 QListWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com