C++ GUI Programming with Qt 4 エラーが起きます
Source Code
http://www.informit.com/store/c-plus-plus-gui-programming-with-qt4-9780132354165
PDF File
https://www.researchgate.net/publication/215458943_C_GUI_programming_with_Qt_4
引き続きお願いします。
mainwindow.cpp
ファイルで余計なメンバ関数は省いています。
下記のエラーが発生します。
1.lineEdit is a private member of 'GoToCellDialog'
2.variable has imcomplete type SpreadSheetCompare
3.no member named "name" in SortDialog
SortDialog
とGoToCellDialog
が関わっているようなのですが、どこがどうなっているのでしょうか。SortDialogについてはC++ GUI Programming with Qt 4 UIのエラー直前の質問でコードを載せてますので、申し訳ありませんがそちらをご覧ください。GoToCellDialog
はここに載せます。(過去に掲載はしましたが不完全なので。)
mainwindow.cpp
#include "mainwindow.h"
#include "gotocelldialog.h"
#include "sortdialog.h"
#include "spreadsheet.h"
#include "finddialog.h"
#include "ui_gotocelldialog.h"
#include "ui_sortdialog.h"
#include <QtWidgets>
#include <QtGui>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{ spreadsheet = new Spreadsheet;
setCentralWidget(spreadsheet);
createActions();
createMenus();
createContextMenu();
createToolBars();
createStatusBar();
readSettings();
findDialog = nullptr;
setWindowIcon(QIcon(":/images/icon.png"));
setCurrentFile("");
}
省略~
void MainWindow::goToCell()
{
GoToCellDialog *dialog = new GoToCellDialog(this);
if (dialog->exec()){
QString str = dialog->lineEdit->text().toUpper();#here lineEdit is a private member of 'GoToCellDialog'
spreadsheet->setCurrentCell(str.mid(1).toInt() -1,
str[0].unicode() - 'A');
}
}
void MainWindow::sort()
{
SortDialog *dialog = new SortDialog(this);
QTableWidgetSelectionRange range = spreadsheet->selectedRange();
dialog->setColumnRange('A' + range.leftColumn(),
'A' + range.rightColumn());
if (dialog.exec()){
SpreadSheetCompare compare;\\unknown type name "SpreadSheetCompare"
compare.keys[0] =
dialog->primaryColumnCombo->currentIndex() - 1;//here no member named "primaryColumnCombo" in SortDialog
compare.keys[1] =
dialog.secondaryColumnCombo->currentIndex() - 1;//here also
compare.ascending[0] =
(dialog.primaryOrderCombo->currentIndex() == 0);//here also
compare.ascending[1] =
(dialog.secondaryOrderCombo->currentIndex() == 0);//here also
compare.ascending[2] =
(dialog.tertiaryOrderCombo->currentIndex() == 0);//here also
spreadsheet->sort(compare);
}
}
MainWindow::~MainWindow()
{
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QAction;
class QLabel;
class FindDialog;
class SortDialog;
class GoToCellDialog;
class SpreadSheetCompare;
class Spreadsheet;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void closeEvent(QCloseEvent *event);
private slots:
void newFile();
void open();
bool save();
bool saveAs();
void find();
void goToCell();
void sort();
void about();
void openRecentFile();
void updateStatusBar();
void spreadsheetModified();
private:
void createActions();
void createMenus();
void createContextMenu();
void createToolBars();
void createStatusBar();
void readSettings();
void writeSettings();
bool okToContinue();
bool loadFile(const QString &fileName);
bool saveFile(const QString &fileName);
void setCurrentFile(const QString &fileName);
void updateRecentFileActions();
QString strippedName(const QString &fullFileName);
Spreadsheet *spreadsheet;
FindDialog *findDialog;
QLabel *locationLabel;
QLabel *formulaLabel;
QStringList recentFiles;
QString curFile;
enum {MaxRecentFiles = 5};
QAction *recentFileActions[MaxRecentFiles];
QAction *separatorAction;
QMenu *fileMenu;
QMenu *editMenu;
QMenu *selectSubMenu;
QMenu *toolsMenu;
QMenu *optionsMenu;
QMenu *helpMenu;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QAction *newAction;
QAction *openAction;
QAction *exitAction;
QAction *selectAllAction;
QAction *showGridAction;
QAction *aboutAction;
QAction *aboutQtAction;
QAction *saveAction;
QAction *saveAsAction;
QAction *cutAction;
QAction *copyAction;
QAction *deleteAction;
QAction *pasteAction;
QAction *findAction;
QAction *goToCellAction;
QAction *selectRowAction;
QAction *selectColumnAction;
QAction *recalculateAction;
QAction *sortAction;
QAction *autoRecalcAction;
};
#endif // MAINWINDOW_H
gotocelldialog.h
#ifndef GOTOCELLDIALOG_H
#define GOTOCELLDIALOG_H
#include <QDialog>
#include <QLineEdit>
#include <QtUiTools/QUiLoader>
namespace Ui {
class GoToCellDialog;
}
class GoToCellDialog : public QDialog
{
Q_OBJECT
public:
GoToCellDialog(QWidget *parent=nullptr);
private slots:
void on_lineEdit_textChanged();
private:
QPushButton *okButton;
QPushButton *cancelButton;
QLineEdit *lineEdit;
Ui::GoToCellDialog *ui;
};
#endif // GOTOCELLDIALOG_H
gotocelldialog.cpp
#include <QtGui>
#include <QtWidgets>
#include <QtCore>
#include <QRegExpValidator>
#include "gotocelldialog.h"
#include "ui_gotocelldialog.h"
GoToCellDialog::GoToCellDialog(QWidget *parent)
:QDialog(parent)
{
ui->setupUi(this);
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));
connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));
connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
}
void GoToCellDialog::on_lineEdit_textChanged()
{
okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
}
gotocelldialog.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GoToCellDialog</class>
<widget class="QDialog" name="GoToCellDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>384</width>
<height>208</height>
</rect>
</property>
<property name="windowTitle">
<string>Go to Cell</string>
</property>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>60</x>
<y>70</y>
<width>249</width>
<height>62</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>&Cell Location</string>
</property>
<property name="buddy">
<cstring>lineEdit</cstring>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="okButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>OK</string>
</property>
<property name="default">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>
実行環境
qtcreator 4.7
qt 5.9.6
c++11
コンパイラ:
Desktop_Qt_5_9_6_MSVC2017_64bit