Qt无法使QEditLine显示文本

Qt can't make QEditLine to show text

本文关键字:显示 文本 QEditLine Qt      更新时间:2023-10-16

我浏览了控制台应用程序,并考虑做一些不同的事情,继续前进,做一些更雄心勃勃的事情。我的朋友告诉我关于ide Qt的事。一切都很顺利,直到我碰壁,这真的阻止了我在新的IDE中开发我的第一个应用程序。以前我使用过Visual Studio,由于互联网上有大量的漫游,我经常自己找到答案,但这次我放弃了!所以这是我第一次寻求帮助。我的应用程序应该是一个简单的计算器。问题是,我无法使QEditLine对象显示由按钮表示的numebr,它从不更改并显示0。如果我使用设计模式,并且做得都一样,它就可以工作,而且dgtClickd((函数的定义在QT提供的示例中几乎相同。我非常乐意为您提供任何建议和帮助。这真的很烦人,我真的不喜欢留下这样没有答案的问题。

klk.cpp

#include "klk.h"
#include "ui_klk.h"
MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent)//,
   // ui(new Ui::MainWindow)
{
    //ui->setupUi(this);

    dgtButton[0] = new QPushButton("&0");
    dgtButton[1] = new QPushButton("&1");
    dgtButton[2] = new QPushButton("&2");
    dgtButton[3] = new QPushButton("&3");
    dgtButton[4] = new QPushButton("&4");
    dgtButton[5] = new QPushButton("&5");
    dgtButton[6] = new QPushButton("&6");
    dgtButton[7] = new QPushButton("&7");
    dgtButton[8] = new QPushButton("&8");
    dgtButton[9] = new QPushButton("&9");
    for(int i =0;i<10;i++) {
        connect(dgtButton[i], SIGNAL(clicked()),this,SLOT(dgtClicked()));
    }
    display = new QLineEdit("0");
    display->setAlignment(Qt::AlignRight);
    display->setMaxLength(15);
    display->setReadOnly(true);
   // centralWidget = new QWidget(this);
    //this->setCentralWidget( centralWidget );
   // layout = new QGridLayout( centralWidget );
    layout = new QGridLayout;
    layout->setSizeConstraint(QLayout::SetFixedSize);
    layout->addWidget(display,0,0,1,3);
    layout->addWidget(dgtButton[1],2,0);
    layout->addWidget(dgtButton[2],2,1);
    layout->addWidget(dgtButton[3],2,2);
    layout->addWidget(dgtButton[4],3,0);
    layout->addWidget(dgtButton[5],3,1);
    layout->addWidget(dgtButton[6],3,2);
    layout->addWidget(dgtButton[7],4,0);
    layout->addWidget(dgtButton[8],4,1);
    layout->addWidget(dgtButton[9],4,2);
    setLayout(layout);
}
void MainWindow::dgtClicked()
{
    QPushButton *clickedButton = qobject_cast<QPushButton *>(sender());
    dgt = clickedButton->text().toInt();
    this->display->setText(QString::number(dgt));
    //display->displayText();
   // display->show();
}
MainWindow::~MainWindow()
{
    //delete ui;
}

klk.h

#ifndef KLK_H
#define KLK_H
#include <QMainWindow>
#include <QPushButton>
#include <QWidget>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <string>
namespace Ui {
class MainWindow;
}
class MainWindow : public QWidget
{
    Q_OBJECT
    QPushButton *dgtButton[10];
    QPushButton *addButton,*subButton;
    QGridLayout *layout;
    QWidget *centralWidget;
    QLineEdit *display;
    int dgt;

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
   // Ui::MainWindow *ui;
private slots:
    void dgtClicked();
};
#endif // KLK_H

klk.pro

#-------------------------------------------------
#
# Project created by QtCreator 2014-04-30T15:37:36
#
#-------------------------------------------------
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = klk
TEMPLATE = app

SOURCES += main.cpp
        klk.cpp
HEADERS  += klk.h
FORMS    += klk.ui

去掉&在文本中,然后将其转换为整数

您至少有两个问题:

  • 您正在尝试将非数字("1"、"2"等(转换为整数。这肯定会失败。

  • 您没有检查QString::toInt()转换是否存在错误。

如果你写了这样的转换操作,你本可以更容易地抓住前者:

bool ok;
dgt = clickedButton->text().toInt(&ok);
if (!ok)
    qDebug() << "Failed to convert to integer:" << clickedButton->text();

文件也很清楚:

int QString::toInt(bool*ok=0,int base=10(const

返回使用base转换为int的字符串,默认情况下base为10,并且必须介于2和36之间,或0如果转换失败,则返回0

意识到这一点后,更改以下行将修复您的代码:

for(int i =0;i<10;i++) {
    dgtButton[i] = new QPushButton(QString::number(i));
    connect(dgtButton[i], SIGNAL(clicked()),this,SLOT(dgtClicked()));
}

正如您所看到的,我在您的代码中修复了另外两个问题:

  • 通过清除循环来减少手动键入。

  • 我使用了以下函数来实际从整数中获取QString值,在这种特殊情况下,整数是循环计数器。

QString QString::number(long n,int base=10([static]

以防万一,为了完整起见,即使QtCreator生成错误,这一行在qmake项目文件中也是不必要的:

QT       += core gui

核心模块和gui模块是默认添加的,因此您可以安全地删除它们。