问题创建一个将一些文本放入qtextedit中的问题



我一直在努力解决插槽问题,但是随着Google搜索结果越来越越来越紫色,我决定只是问SO SO SO SOPALS =)请注意,我不使用QTCreator或任何动态的东西。我需要:

  1. 声明一些常数的QString
  2. 从Qlineedits中获得一些QString
  3. 添加1和2
  4. 最后,单击按钮时,将它们放入qtextedit。

对于第1步,我声明了这样的QString:

QString set_1 = "ООО «Хеллманн» (129343, г. Москва, ул. Уржумская, д. 4, стр. 14, ИНН 7722637955, ОГРН 1087746168476) доверяет забор груза - ";
QString set_2 = " - перегружаемого из контейнера ";
QString set_3 = ", в количестве ";
QString set_4 = " паллет, весом ";
QString set_5 = " кг, водителю ";
QString set_6 = ", паспорт ";
QString set_7 = " выдан ";
QString set_8 = ".";
QString set_9 = " На автотранспортном средстве марки ";
QString set_10 = " - ";
QString set_11 = ", прицеп: ";

然后,对于第2步,我从这样的qlineedits中进行qString(例如line_b_b是qlineedit的名称):

QString a = line_b_b.text();
QString b = line_b_a.text();
QString c = line_b_c.text();
QString d = line_b_d.text();
QString e = line_a_b.text();
QString f = line_a_a.text();
QString g = line_a_c.text();
QString h = line_a_d.text();
QString i = line_c_b.text();
QString j = line_c_a.text();
QString k = line_c_c.text();

在第3步中,我将步骤1的QString与步骤2的QString添加到一个名为" Doverka"的变量(请不要介意此西里尔的东西):

QString doverka = set_1+a+set_2+b+set_3+c+set_4+d+set_5+e+set_6+f+set_7+g+h+set_8+set_9+i+set_10+j+set_11+k+set_8;

最后,在步骤4中,我尝试将整个按钮按下按钮。我想问题在这里。我创建了一个名为"文本"的qtextedit:

QTextEdit text (&dw);
text.show(); 

然后我尝试创建一个插槽,我想我以一种完全错误的方式这样做,因为它根本不起作用:

QPushButton btn_t ("Создать текст", &dw);
   QObject::connect(
      &btn_t,
      SIGNAL(clicked()),
      &text,
      SLOT([dover](){return text.setText(doverka)}));
   btn_t.show();

我是QT和C 的新手,这就是为什么在创建老虎机时差的原因。在这里,我已经使用了lambda功能尝试了一下,但是我显然做错了什么。也许我应该在SLOT之前将lambda函数放在其他地方?我的插槽没有被认为是在编译后的,我收到了"没有这样的插槽"通知。也许问题是较早的地方,例如从Qlineedits(步骤2)中制作QStrings?..我非常无助,并且非常感谢任何有用的技巧!非常感谢。

您正在尝试将旧样式QT信号/插槽连接与新样式混合,这显然不起作用。Lambdas只能与新的连接风格一起使用。如果您使用的是QT 5,则连接可能是:

QObject::connect(
  &btn_t,
  &QPushButton::clicked,
  [&text, &doverka](){
     text.setText(doverka);
  });

您应该小心,textdoverka对象在调用lambda之前不应销毁,因为它们是通过参考捕获的。

如果使用QT4。*您应该使用旧语法。在您的情况下,只需在您的课堂上提供一个插槽,然后将信号连接起来:

QObject::connect(
  &btn_t,
  SIGNAL(clicked()),
  this,
  SLOT(onClicked()));

您的课程应从包含一个插槽的QObject继承:

public slots:
    void onClicked() {
         text.setText(doverka);
     }

还要注意textdoverka应该是类的成员。

最新更新