【问题标题】:Store QLineEdit's data into a QString upon a QPushButton click单击 QPushButton 时将 QLineEdit 的数据存储到 QString 中
【发布时间】:2012-12-16 17:25:28
【问题描述】:

我是 Qt 编程的新手。从我猜的标题来看,我想做的几乎是不言自明的。我有一个 lineEdit,当单击 cretain PushButton 时,我想将其数据存储在 QString 中。问题是上述小部件位于 graphicsScene 内,所以我没有 on_pushbutton_clicked(); 功能。

我自己的解决方案的代码如下,但正如您可能已经猜到的那样,它不起作用。

QLineEdit *l = new QLineEdit ;
QPushButton *b = new QPushButton;

QGraphicsProxyWidget *line = scene.addWidget(l);
QGraphicsProxyWidget *button = scene.addWidget(b);

line->setPos(-600,270);
button->setPos(-600,310);
//b->clicked();

QString input;
QString input = l->text(input);


QObject::connect(b,SIGNAL (clicked()),l, SLOT (setText(QString)));

我们将不胜感激任何形式的帮助。

【问题讨论】:

    标签: qt qt4 qgraphicsscene qlineedit qpushbutton


    【解决方案1】:

    我看不出将小部件放在 QGraphicsScene 中会有什么不同。

    1. 在你的类中保留一个指向 QLineEdit "l" 的指针,例如作为 QLineEdit* m_lineEdit。

    2. 将 b, SIGNAL(clicked()) 连接到插槽 buttonClicked()。

    3. 像这样实现按钮点击:

      void MyWidget::buttonClicked() {
          const QString text = m_lineEdit->text();
          //do something with "text"
      }
      

    【讨论】:

    • 问题是我所有这些小部件和 QGraphicsScene 都是在主函数中创建的。所以我没有 mainwindow::buttonclicked() 或 dialog::buttonclicked() 之类的东西。另外我还没有重新实现 b 是对象的 QPushButton 。 b 是一个默认的 QPushButton,所以我没有一个“MyWidget”,我可以为它实现你提到的这个功能。 void MyWidget::buttonClicked() { const QString text = m_lineEdit->text(); //用“文本”做一些事情 }
    • 您需要一些可以连接到 clicked() 并了解 LineEdit 以及如何处理它的 QObject。要以一种自定义方式对信号做出反应,而不仅仅是将现有信号连接到现有插槽,除了定义一个插槽之外别无他法,这只能在 QObject/QWidget 子类中发生。
    • 谢谢。我认为我必须创建自己的自定义小部件来解决这个插槽和信号问题!
    猜你喜欢
    • 2018-04-25
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多