Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
U
Aug. 1, 2018, 8:05 a.m.

Помогите со слоями

Хочу написать прогу учёт финансов. Для начала надо решить такую задачу: задумано 3 слоя, условно "главное меню", "меню доходов", "меню расходов". В каждом меню есть кнопки, посредством нажатия которых юзер должен переходить от слоя к слою(от меню к меню). Что и где исправить чтоб при нажатии кнопки главного меню скажем "Расходы", текущий слой скрылся, а слой меню "Расходы" с кнопками показался?

П.С. Код переделывал и так и этак, так и не скомпилился, поэтому может быть лишак то тут, то там.

37
U

Не нашёл как прикрепить несколько файлов

0
U

И еще

0

Добрый день.

Пожалуйста, не прикрепляйте программный код в виде картинок, а используйте для вставки программного кода специальный диалог... в редакторе это кнопка со значком "<>".
Тогда там будет выбрана подсветка синтаксиса кода. Никто не будет перепечатывать весь ваш код у себя, если захочет проверить, где ошибка со сборкой.

0
U

Здравствуйте, Евгений. Я конечно всё понимаю, но Вы уж помогите по материалам которые доступны. Код - изи. Думаю и на глаз будет понятно что к чему, но на будущее усвоил. Больше так делать не буду.

0

А что касается самого кода,
то думаю, что ошибка в том, что у вас слоты написаны так, что там происходит копирование, вместо взятия по ссылке...
Объявление должно быть следующим, соответственно и реализацию исправить нужно.
void MainToD (QMainWindow&, QVBoxLayout*);
Ну и плюсом сам коннект слота... Параметры передавать нельзя в СЛОТ, компилироваться не будет. Это подключение сигнала к слоту. Можно разрешить через лямбду в принципе.
QObject::connect(pb1, &QApplication::clicked, [&window, DL]()
{
    window.MainToD(window, DL);
});
Также слоты исправить так
void MainWindow::MainToD(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(bl);
    a.show();
}
Также, подтяните знания по С++ , ошибки совсем дилетантские, и к Qt никак не относятся.
Также, рекомендую почитать про сигналы и слоты
0
U

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QVBoxLayout>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
private slots:
    void MainToD(QMainWindow&, QVBoxLayout*);
    void MainToR(QMainWindow&, QVBoxLayout*);
    void ToMain(QMainWindow&, QVBoxLayout*);
};

#endif // MAINWINDOW_H

mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
class QMainWindow;
class QVBoxLayout;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainToD(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(&bl);
    a.show();
}

void MainToR(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(&bl);
    a.show();
}

void ToMain(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(&bl);
    a.show();
}

main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QVBoxLayout>
#include <QMainWindow>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QPushButton * pb1 = new QPushButton("Доходы");
    pb1->show();
    QPushButton * pb2 = new QPushButton("Расходы");
    pb2->show();
    QPushButton * pb3 = new QPushButton("Выход");
    pb3->show();
    QPushButton * pb4 = new QPushButton("Просмотреть доходы");
    pb4->show();
    QPushButton * pb5 = new QPushButton("Записать доходы");
    pb5->show();
    QPushButton * pb6 = new QPushButton("Назад");
    pb6->show();
    QPushButton * pb7 = new QPushButton("Выход");
    pb7->show();
    QPushButton * pb8 = new QPushButton("Просмотреть расходы");
    pb8->show();
    QPushButton * pb9 = new QPushButton("Записать расходы");
    pb9->show();
    QPushButton * pb10 = new QPushButton("Назад");
    pb10->show();
    QPushButton * pb11 = new QPushButton("Выход");
    pb11->show();

    QVBoxLayout * MainL = new QVBoxLayout;
    MainL->addWidget(pb1);
    MainL->addWidget(pb2);
    MainL->addWidget(pb3);
    QVBoxLayout * DL = new QVBoxLayout;
    DL->addWidget(pb4);
    DL->addWidget(pb5);
    DL->addWidget(pb6);
    DL->addWidget(pb7);
    QVBoxLayout * RL = new QVBoxLayout;
    RL->addWidget(pb8);
    RL->addWidget(pb9);
    RL->addWidget(pb10);
    RL->addWidget(pb11);

    MainWindow window;
    window.setLayout(MainL);
    window.show();

    QObject::connect(pb1, &QPushButton::clicked, [&window, DL]()
    {
        window.MainToD(window, DL);
    });
    QObject::connect(pb3, SIGNAL(clicked()), &app, SLOT(quit()));

    return app.exec();
}

Сделал как порекомендовали
0
U

Не могу фотки ошибок прикрепить

0

Не совсем полностью, как порекомендовал.... плюс там ещё ошибки есть, с картинки неудобно ревировать код.


main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QPushButton * pb1 = new QPushButton("Доходы");
    pb1->show();
    QPushButton * pb2 = new QPushButton("Расходы");
    pb2->show();
    QPushButton * pb3 = new QPushButton("Выход");
    pb3->show();
    QPushButton * pb4 = new QPushButton("Просмотреть доходы");
    pb4->show();
    QPushButton * pb5 = new QPushButton("Записать доходы");
    pb5->show();
    QPushButton * pb6 = new QPushButton("Назад");
    pb6->show();
    QPushButton * pb7 = new QPushButton("Выход");
    pb7->show();
    QPushButton * pb8 = new QPushButton("Просмотреть расходы");
    pb8->show();
    QPushButton * pb9 = new QPushButton("Записать расходы");
    pb9->show();
    QPushButton * pb10 = new QPushButton("Назад");
    pb10->show();
    QPushButton * pb11 = new QPushButton("Выход");
    pb11->show();

    QVBoxLayout * MainL = new QVBoxLayout;
    MainL->addWidget(pb1);
    MainL->addWidget(pb2);
    MainL->addWidget(pb3);
    QVBoxLayout * DL = new QVBoxLayout;
    DL->addWidget(pb4);
    DL->addWidget(pb5);
    DL->addWidget(pb6);
    DL->addWidget(pb7);
    QVBoxLayout * RL = new QVBoxLayout;
    RL->addWidget(pb8);
    RL->addWidget(pb9);
    RL->addWidget(pb10);
    RL->addWidget(pb11);

    MainWindow window;
    window.setLayout(MainL);
    window.show();

    QObject::connect(pb1, &QPushButton::clicked, [&window, DL]()
    {
        window.MainToD(window, DL);
    });
    QObject::connect(pb3, SIGNAL(clicked()), &app, SLOT(quit()));

    return app.exec();
}

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
class QVBoxLayout;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void MainToD(QMainWindow&, QVBoxLayout*);
    void MainToR(QMainWindow&, QVBoxLayout*);
    void ToMain(QMainWindow&, QVBoxLayout*);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::MainToD(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(bl);
    a.show();
}

void MainWindow::MainToR(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(bl);
    a.show();
}

void MainWindow::ToMain(QMainWindow& a, QVBoxLayout* bl)
{
    a.hide();
    a.setLayout(bl);
    a.show();
}
0

Максимальный размер прикрепляемого файла - 1 мегабайт

0
U

Спасибо, Евгений, собралось. Однако вид у приложения следующий: открывается белый экран и при каждом нажатии кнопки "назад"(собирал под ведро)  на весь экран появляются кнопки pb11, pb10,..pb1и при ещё одном нажатии Назад приложение закрывается. Срабатывает только pb1(открывается пустое окно как в начале) и при нажатии Назад возвращает на кнопку pb1, ну и pb3 закрывает приложение(больше я не делал кнопки). Что я сконструировал не так?

0
  1. Под Андроид лучше разработку вести на QML, чем на классических виджетах
  2. Кнопки и слои как минимум должны быть скрыты в вашем случае. Соберите под Десктоп и увидите ещё более печальную картинку. Также у кнопок должен быть parent (то есть MainWindow), иначе они будут висеть отдельными окнами
  3. Насчёт того, что сконструировали не так. У вас просто недостаточно опыта, чтобы сразу правильно спроектировать, а рассказывать слишком много, делайте всё поступательно, а не наскоком. И смотрите как сделано в статьях, вот здесь достаточно примеров для самых разных случаев: Qt разработка

Под Андроид рекомендую также посмотреть вот эти разделы:

0

Проверочное сообщение

0
U

Буду задавать свои вопросы здесь.

В классе есть QLineEdit* line_sum = new QLineEdit; Так же в классе есть вложенный класс в котором(в public:) есть переменная QString sum, в которую надо записать значение введённое в QLineEdit line_sum. Создаю во вложенном классе метод QString mthd() { sum = line_sum->text(); return sum; }

Ругается так - ошибка: use of local variable with automatic storage from containing function sum = lineEdt->text(); ^

Как сделать правильно?

0

Буду задавать свои вопросы здесь.

Это, конечно, сильное заявление, но лучше бы вы для независящих вопросов создавали отдельные темы на форуме. Нескончаемый поток вопросов в одной теме только бардак разводит. А этот вопрос как раз не имеет никакого отношения к первоначальному вопросу. Не плодите оффтопы, пожалуйста.

А теперь к сути.

Проблема скорее всего в том, что вложенный класс не имеет доступа к членам класса, в который он вложен. Да и нужен ли этот класс, тоже очень сильно под вопросом.

0
U

Проблема скорее всего в том, что вложенный класс не имеет доступа к членам класса, в который он вложен.

Что-то не соображу как этот доступ дать. QLineEdit line_sum в паблик секции, вложенный класс тоже, QString sum в паблик секции вложенного класса. Наведите на путь истинный, чего я здесь не учёл?

0
U

Проблема скорее всего в том, что вложенный класс не имеет доступа к членам класса, в который он вложен.

Что-то не соображу как этот доступ дать. QLineEdit line_sum в паблик секции, вложенный класс тоже, QString sum в паблик секции вложенного класса. Наведите на путь истинный, чего я здесь не учёл?

Да и нужен ли этот класс, тоже очень сильно под вопросом.

Моя задумка в том чтобы каждый раз когда я перехожу в окно с вводом параметров(где все эти QLineEdit сидят) создавался бы объект вложенного класса имеющий в себе переменные QString, которые хранили бы в себе всю введённую инфу, и далее отсюда записывались в лог.

Как тут удалить сообщение?

0

Лучше покажите программный код класса со вложенным классом полностью ))

Как тут удалить сообщение?

Пока никак, некоторые вещи или в планах или в стадии разработки. Думаю, что добавлю модуль идей и предложений на сайт. Тогда дело лучше пойдёт в плане фидбека.

0
U

widget.cpp

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QDateEdit* dateEdit = new QDateEdit(QDate::currentDate());
    QLineEdit* line_sum = new QLineEdit;
    QLineEdit* line_det = new QLineEdit;
    QComboBox* ctgs = new QComboBox;

    class Cell
    {
    public:
        QDate* date = new QDate(QDate::currentDate());
        QString sum;
        QString* category = new QString;
        QString* details = new QString;
        QString* str = new QString;
        QString wSum()
        {
            sum = line_sum->text();
            return sum;
        }
    };
}

Я тут уже и QString sum просто так создал, не выделял динамическую память. Кстати на что это может повлиять, и может лучше создавать sum как указатель?

Это будет типа окошко в котором я буду вводить данные о расходах/доходах. В QComboBox будут категории, в остальных дата, сумма и подробности.

0

Как минимум вот это...

class Cell
    {
    public:
        QDate* date = new QDate(QDate::currentDate());
        QString sum;
        QString* category = new QString;
        QString* details = new QString;
        QString* str = new QString;
        QString wSum()
        {
            sum = line_sum->text();
            return sum;
        }
    };

Убрать из конструктора вообще. Никто так не пишет, ни одно код-ревью это не пройдёт, если вообще заработает.

Убрать до заголовочного файла. А там уже поговорим дальше.

0
U

Это будет типа окошко в котором я буду вводить данные о расходах/доходах. В QComboBox будут категории, в остальных дата, сумма и подробности. Я думаю чтоб заходя в это окно сразу создавался объект Cell a(); ну и там уже на основании введённого в поля, данные сохранять в a.sum, a.category, и т.п.

Насчёт скудности знаний знаю. Просьба не отправлять учить плюсы(это ответ в общем плане), а исходить из того что есть(в моей голове), конечно замечая и поправляя меня в нужном конкретно здесь направлении. Заранее спасибо.

0
U

Т.е. мне надо описать Cell.h и Cell.cpp?

0

Вы можете описать Cell и внутри Widget, но делать это нужно в Widget.h, но лучше делайте всё сначала в отдельных файлах, чтобы не собирать специфические грабли раньше времени.

В конструкторе будет локальная видимость только внутри конструктора. Если и получится использовать данный класс, то только внутри конструктора. В общем не делайте никогда подобного, если реально не будет такой необходимости.

Так что да, создайте отдельные Cell.h и Cell.cpp. Это будет лучше и чище.

0
U

создайте отдельные Cell.h и Cell.cpp

cell.h

#ifndef CELL_H
#define CELL_H
#include <QString>
#include <QDate>

class Cell
{
public:
    QDate* date;
    QString sum;
    QString category;
    QString details;
    QString str;
    void wSum();
};

#endif // CELL_H

cell.cpp

#include "widget.h"
#include "cell.h"

class Cell
{
public:
    QDate* date = new QDate(QDate::currentDate());
    QString sum;
    QString* category = new QString;
    QString* details = new QString;
    QString* str = new QString;
    QString wSum()
    {
        sum = line_sum->text();
        return sum;
    }
};

Я правильно сделал? Просто всегда всё в мэйне делал, потом меня тут заплевали что так никто не пишет, теперь мол давай в отдельных файлах класс делай. Я не делал такого никогда, так что без смеха.

0

Просьба не отправлять учить плюсы

и извиняюсь, если показался несколько резковатым. Просто в осадок немного выпал, что вам в голову пришло такое. Но ничего, подучитесь, поднатореете и всё нормально будет.

0

cell.h

#ifndef CELL_H
#define CELL_H
#include <QString>
#include <QDate>

class Cell
{
public:
    QDate* date;
    QString sum;
    QString category;
    QString details;
    QString str;
    void wSum();
};

#endif // CELL_H

cell.cpp

#include "cell.h"

Cell::Cell()
{
    date = new QDate(QDate::currentDate());
}

QString Cell::wSum(const QString& fromLineSum) 
{
    sum = fromLineSum;
    return sum;
}

И потом где-нибудь внутри виджета

Cell c;
c.wSum(line_sum->text());

Но подучить c++ вам действительно нужно, рекомендую параллельно почитать про основы C++ , классы

1
U

подучитесь, поднатореете

Евгений, хороший мой, у меня нет времени учиться. Поймите, я не могу вот это вот всё "ай кьюти 10 вышел!", "ай надо установить кьюти 10!", "ай, а тут класс новый вышел!", "ай то!", "ай сё!". Я должен делать так как могу на данный момент. Посмотрите сколько времени прошло с момента создания темы. Приложение до сих пор не написано. Понимаете, просто когда в книге пишут создавай QPushButton, клади его на QVBoxLayout и наноси на QStckedWidget(в обратном порядке конечно же=)), а в жизни работает создание кнопок через вектор и ui->QPushButton, и прочие неведомые навороты... Честно, извините, но у меня нет времени учиться ВЕЧНО. Постарался покороче. Надеюсь поймёте(а то уже руки опускаются).

0
U

И потом где-нибудь внутри виджета

Cell c; c.wSum(line_sum->text()); Но подучить c++ вам действительно нужно, рекомендую параллельно почитать про основы C++ , классы

Спасибо. Буду осваивать. Насчёт подучить. Очень много ресурсов это требует к сожалению. У меня в черепной коробке не самый мега мозг для этого, но я учту Ваши советы. Спасибо. Даже так: Я всё прекрасно понимаю, но каждый раз я перехожу с Си на кьюти, и каждый раз возвращаюсь назад. Просто помогите мне протиснуться с теми знаниями которые у меня есть сейчас. Я отдаю себе отчёт, что в будущем я скажу Вам огромное спасибо за то что Вы не дали мне конкретно то что я хотел бы услышать, а указали мне на пробелы.

0

но у меня нет времени учиться ВЕЧНО

давайте без истерик, вы это говорите человеку, который всю жизнь учился, учится и будет учиться, и в программировании всегда так, или учишься или ищешь другую профессию, это не та сфера, где научился крутить одну гайку и всю жизнь её крутишь.

Никогда не говорю просто так кому-то, что нужно подучить и подтянуть знания, только когда это реально нужно. Иначе вся тема превратится не в помощь в каком-то вопросе, а в моём написании вашей программы.

1
U

И потом где-нибудь внутри виджета

Cell c; c.wSum(line_sum->text());

1)OK. Я создаю слот void Widget::addObject(); для того чтобы при нажатии кнопки(пусть будет "Ввести данные") создавался объект класса Cell, и в его поля записались данные из полей ввода на странице QStackedWidget. Вижу я это так:

void Widget::addObject()
{
      Cell a;
      a.wSum(line_sum->text);

//немного тут изменил код, сделал метод wSum следующим образом

      a.wSum()
      {
             sum = line_sum->text();
             return sum;
       }

2)Теперь хочу в этом же слоте вызвать метод addToText(); для записи данных в файл. Я полагаю что мне нужно передать в конструктор addToText(const QString& s);, т.е. сделать так:

void Widget::addObject()
{
      Cell a;
      a.wSum(line_sum->text);
      addToText(&sum);
}

void Widget::addToText(const QString& s)
{
      QFile file("1.txt");
      QTextStream stream(&file);
      stream << s << '\n';
      file.close();
}

Прошу меня поправить и указать где я возможно допустил ошибки.

3)Я хочу в addWidget сделать коннект чтобы по нажатии кнопки ui->ok вызывался слот addToText(const QString& s);. Как это сделать правильно?

void Widget::addObject()
{
      Cell a;
      a.wSum(line_sum->text);
      connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText());
}

Что передавать в addToText? a.sum? Cell::a.sum? Cell::sum? По-всякому уже пробовал, засыпает меня ошибками. Много часов потратил на этот маленький кусок кода прежде чем написать сюда. Сил больше нет, покажите как надо.

0

Вы на правильном пути, но сигнатура addText должна выглядеть иначе

Только так в данном случае

void Widget::addToText()

Потому, что сигнал clicked

имеет следующую сигнатуру
void QAbstractButton::clicked(bool checked = false)

В данном случае слот должен быть совместимым с сигнатурой clicked, а значит может иметь только два варианта сигнатуры

void Widget::addToText()
void Widget::addToText(bool checked = false)

Вам не интересе второй вариант, поскольку check состояния вы не используете, поэтому используем первый вариант.

Но, по моему мнению коннект должен быть у вас другой. Примерно такой

connect(ui->ok3, &QPushButton::clicked, this, &Widget::addObject);

Причём его нужно располагать в конструкторе Widget.

По мне так в addText можно сразу добавить текст из строки ввода,

addToText(line_sum->text);

либо взять текст из Cell объекта.

addToText(a.sum);

И файл нужно открывать на запись, кстати.

if (file.open(QIODevice::WriteOnly))
{
}
1
U
void Widget::addObject()
{
    Cell a;
    connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText);
}
void Widget::addToText()
{
    QFile file("1.txt");
    QString str;
    QTextStream ts(&file);
    if(file.open(QIODevice::WriteOnly))
    {
        ts << "Date: " << Cell::date->toString(str) << '\n';
        ts << "Sum: " << Cell::sum << '\n';
        ts << "Category: " << Cell::category << '\n';
        ts << "Details: " << Cell::details << '\n';
        ts << "***************" << '\n';
        file.close();
    }
}

Вот что я смог выжать из объяснения. Насыпает ошибки там где я вызываю поля. Мне неясно как в addToText() передавать поля объекта Cell если сигнатуры сигнала и слота обязаны быть одинаковыми. Вызов Cell::sum не работает. Так как мне описать здесь работу метода addToText? Ну и возможно ещё какие ошибки здесь есть.

0
U

И ещё вопрос: что и где нужно указать чтоб размеры приложения автоматом подстроились под экран? У меня дисплей 1440х2560, но на телефонах с меньшим дисплеем приложение наверное будет некорректно отображаться, да и мне в редакторе, если я укажу такие размеры будет не удобно редактировать такую махину. Сейчас у меня стоят какие-то маленькие размеры - 303х491(подсмотрел ге-то в видео на ютубе). В принципе можно и так оставить(на компе в редакторе помещается без скроллов и ладно), но если есть какая-то технология правильная по подстройке размеров, то буду благодарен за совет.

0

В файле main

QApplication a(argc, argv);
MainWindow w;
w.setGeometry(0, 0, a.desktop()->width(), a.desktop()->height());

Размещение всех компонентов делайте используя Layouts, для каждого объекта указывайте минимальные/максимальные размеры при растяжениях/сжатиях, параметры их поведения. Тогда при изменениях размера окна будут изменяться и размеры элементов. Можно усложнить задачу и при различных размерах перемещать элементы в разные группы, но это уже потом, после освоения Layouts.

1

Только статические методы и участники класса можно вызывать подобным образом

Cell::sum

У вас же они нестатические, чтобы их вызывать, нужно иметь объект Cell.

Вы его, конечно, создаёте, но он существует только в области видимости метода.

void Widget::addObject()
{
    Cell a;
    connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText);
}

А вот этот коннект здесь и вовсе не нужен

connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText);

Я вам писал, что коннекты для этого нужно расположить в конструкторе класса. Это то место, куда вы вначале записывали вложенный класс.

Ещё почитайте о сигналах и слотах вот в этой статье , чтобы разобраться как они работают.

1
U

А вот этот коннект здесь и вовсе не нужен

connect(ui->ok3, &QPushButton::clicked, this, &Widget::addToText);

А как же без него?

==============================

Только статические методы и участники класса можно вызывать подобным образом

Это значит надо думать в сторону вложенного класса или создавать поля прямо в Widget убирая Cell вообще? Совсем голова уже не думает.

0

Коннект нужен, но не внутри метода, а внутри конструктора класса. Я вам это уже третий раз пишу.

Это значит надо думать в сторону вложенного класса или создавать поля прямо в Widget убирая Cell вообще?

В вашем случае лучше создать поля внутри Widget. От того, что вы создадите вложенный класс, ничего не изменится, вы всё равно не понимаете, что такое статические поля и нестатические.

Статическое поле существует в одном экземпляре всегда, поскольку относится не к конкретному объекту, а к классу.

1
U

Помогайте, целый день убил. Пишу валидатор для ввода суммы. Как должно выглядеть регулярное выражение чтобы первым символом вводился либо "-" либо 1-9? Вторая часть выполняется корректно (...[0-9]{1-9}), а первую никак не могу правильно написать, как ни пытаюсь. Остановился пока на ([1-9-]{1}[0-9]{1-9}), но при этом выходит так что первый символ может быть и буквой(рус.,англ.), после ввода первого символа буквы уже не вводятся.

Как в кьюте сделать чтоб при нажатии на lineEdit открывалась цифровая клавиатура, а при нажатии на dateEdit открывался виджет календаря(или что там на андроиде должно открываться)?

0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
v
Jan. 17, 2019, 11:51 a.m.
vitalir12

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
v
Jan. 17, 2019, 11:49 a.m.
vitalir12

C++ - Test 002. Constants

  • Result:50points,
  • Rating points-4
v
Jan. 17, 2019, 11:13 a.m.
vitalir12

C++ - Тест 003. Условия и циклы

  • Result:28points,
  • Rating points-10
Last comments
I
Jan. 16, 2019, 8:06 a.m.
IscanderChe

Заработало. Забыл model->select(); вписать.
I
Jan. 16, 2019, 8:02 a.m.
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
Jan. 16, 2019, 7:51 a.m.
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
Jan. 16, 2019, 7:43 a.m.
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Now discuss on the forum
Jan. 17, 2019, 1:40 p.m.
Михаиллл

Спасибо, заработало.Учту с переменными.
Jan. 17, 2019, 12:01 p.m.
Алексей Внуков

у меня просто есть отдельное поле с чекбоксамими какие колонки нужно отображать CheckBox { id: checkBox text: qsTr("some text") checked: true onC...
Jan. 15, 2019, 4:53 p.m.
Михаиллл

Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
Jan. 15, 2019, 12:52 p.m.
BlinCT

Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
Join us in social networks

For registered users on the site there is a minimum amount of advertising