2012-12-18 76 views
1

我正在開發Qt中的一個html編輯器來處理我的大學任務之一,而且我對某些變量的命名有問題。qt/C++動態地命名變量

的問題是這樣的:

當用戶決定加載自己的「項目」,通過該文件夾中的程序重複,發現有多少.html文件都在那裏

,它將創建他們的標籤顯示在

我有一個自定義的QTextEdit,它有一個客戶完成程序和語法突出顯示等我現在遇到的問題是如何創建它們取決於所需的數量。

我創建的文件名QStringList中:

QStringList m_files; 
      m_files = aDialog.m_loadDirectory->entryList(QStringList("*.html"),QDir::Files|QDir::NoSymLinks); 

然後我通過列表中的每一個迭代:

for(int i=0; i<m_files.count();i++) 
{ 

} 

,併爲每一個我需要創建一個新的自定義的QTextEdit

TextEdit *name = new TextEdit; 

然後添加到標籤

tabs->addTab(name,"someTitle"); 

但由於每個文本編輯需要爲每個選項卡不同(我認爲這是正確的)我需要爲每一個不同的變量名稱。

我想到了創建文本編輯對象的列表/數組,但我不知道我需要使用多少,我可以有太多的(浪費內存),很容易最終還是不夠..

任何想法我如何解決這個問題?

一個念頭..

,纔有可能在循環

然後之前創建一個文本編輯對象創建該對象的副本中環和複製的對象添加到標籤? (仍存變數命名問題...)

感謝

+1

爲什麼不能:'tabs-> addTab(new TextEdit,「someTitle」);'?無論如何,你可以使用任何標籤槽'標籤'集合。 – maverik

+0

對不起,我應該說,我不能這樣做的原因是我需要能夠添加到TextEdit完成者之前,我將它添加到選項卡。除非我添加它,然後從標籤集合中拉出它hmm – Vade

回答

3

但是如同每種文本編輯需要爲每個標籤不同的(我認爲這是正確的)

是的,你在每個選項卡中需要不同的TextEdit

我需要爲每個變量名稱。

不,你不需要每個變量的名稱不同。您需要不同的對象,但變量名稱與此無關。

簡單:

for (...) { 
    TextEdit *te = new TextEdit(...); 
    // set up that text edit in whatever way you need 
    tabs->addWidget(te, "foo"); 
} 

不正是你想要的。變量名稱te完全不相關(它甚至不會出現在調試符號外的可執行文件中)。每次循環時,您都將在單獨的TextEdit實例上工作。

如果您需要在運行時按名稱引用該文本編輯,則可以將所有小部件保存在集合中,例如QMap

QMap<QString, QWidget*> all_editors; 
... 

for (...) { 
    TextEdit *te = ...; 
    all_editors[filename] = te; 
    ... 
} 
+0

謝謝你的朋友,我因爲某種原因而對名稱的價值感到困惑:)我認爲更多的咖啡對我來說。再次感謝(如果可以的話,會向上箭頭兩次 – Vade

1

你也很快放棄了唯一可行的解​​決方案:把你的文本編輯一個收藏。發短信必須是創建,所以收集本身不會浪費空間。

對於最簡單的情況,您可以使用QPair<QTabWidget*, QTextEdit*>。對於更復雜的情況下創建一個自定義小部件,並只是列出這些。

複製QObject是一個非常糟糕的主意。我想拷貝構造函數是私有的,所以你甚至不能夠做到這一點