【问题标题】:How to change the widgets property if I use QT Designer如果我使用 QT Designer,如何更改小部件属性
【发布时间】:2022-01-27 20:53:41
【问题描述】:

我正在使用 Visual Studio 2022 和 C++ QT 5.14.2。

我使用 QT Designer 设置了 PushButton 和 LineEdit,并给了它们一些初始属性。但是我在按钮单击信号槽功能中遇到了问题,这是我的代码:

void SocketChat::on_connectButton_clicked() {
    appendMessage(ui.connectButton->text());  // output button's text
    if (ui.addrEdit->isEnabled() && ui.portEdit->isEnabled()) {
        // disabled
        ui.addrEdit->setEnabled(false);
        ui.connectButton->setText(QStringLiteral("Disconnect"));
        appendMessage(ui.connectButton->text());  // output button's text
    }
    if (ui.addrEdit->isEnabled() && !ui.portEdit->isEnabled()) {
        ui_notification->setText(QStringLiteral("Please stop listening."));
    }
    if (!ui.addrEdit->isEnabled() && ui.portEdit->isEnabled()) {
        // enabled
        ui.addrEdit->setEnabled(true);
        ui.connectButton->setText(QStringLiteral("Connect"));
    }
}

按钮的文字在QT Designer中分配给'Connect',功能完成后,按钮的文字仍然是'Connect'。

appendMessage函数每次点击输出两个字:

连接 断开连接

点击功能正常工作,但按钮的文本已在此功能中成功更改。但是功能完成后,一切都恢复了。按钮的文本仍然是“连接”。我试过repaint()update(),它们无法工作。

如何更改小部件的属性?似乎这些属性一旦更改就无法初始化。

【问题讨论】:

    标签: c++ visual-studio qt properties


    【解决方案1】:

    您缺少一些 else 关键字。

    请注意,当您的按钮被点击时,第一个if-block(标记为“// disabled”)会被执行,它会禁用ui.addrEdit 按钮。由于缺少else 关键字,程序随后还会检查其他if 语句的条件。并且由于按钮现在被禁用,最后一个条件评估为真,因此标记为“//启用”的块也运行。这不是你想要的。

    【讨论】:

    • 谢谢!也许我需要休息一下,这是一个愚蠢的错误。在我的代码风格中,我应该在每个 if 语句中添加 return;
    • 添加returns 当然也可以解决问题。我个人喜欢else 关键字,因为它表示“只有其中一个会执行”。但我不想开始整个“何时使用提前返回”的讨论。 与你的代码风格保持一致是最重要的事情。所以+1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多