簡體   English   中英

創建用於將一些文本放入QTextEdit的槽的問題

[英]Problems creating a slot for putting some text into QTextEdit

我已經做了相當深入的研究,因為我一直在努力解決插槽問題,但隨着谷歌搜索結果越來越變得越來越紫,我決定只問SO友好=)請注意我沒有使用QtCreator也沒有動態的東西。 我需要:

  1. 聲明一些不變的QStrings
  2. 從QLineEdits中獲取一些QStrings
  3. 加1和2
  4. 最后,單擊一個按鈕時將它們放入QTextEdit。

對於第1步,我聲明QStrings如下:

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中生成QStrings(例如,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中的QStrings與步驟2中的QStrings添加到名為“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。 我猜問題就在這里。 我創建了一個名為“text”的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中生成QStrings(步驟2)?我非常無助,非常感謝任何有用的提示! 非常感謝。

您正試圖將舊式Qt信號/插槽連接與新風格混合,這顯然不起作用。 lambdas只能用於新的連接方式。 如果您使用的是Qt 5,則連接可能如下:

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

您應該注意,在調用lambda之前不應該銷毀textdoverka對象,因為它們是通過引用捕獲的。

如果使用Qt 4. *,您應該使用舊語法。 在您的情況下,只需在您的班級中提供一個插槽並連接信號:

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

您的類應該從包含以下插槽的QObject繼承:

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

另請注意, textdoverka應該是該類的成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM